"""
创建示例菜单数据的管理命令
"""
from django.core.management.base import BaseCommand
from rbac.models import Menu, Role


class Command(BaseCommand):
    help = '创建示例菜单数据'

    def handle(self, *args, **options):
        # 创建基础菜单数据
        menus_data = [
            {
                'name': 'RBAC权限系统',
                'code': 'rbac_system',
                'description': '完整的用户权限管理系统',
                'icon': 'fas fa-shield-alt',
                'url': '/rbac/',
                'color': 'primary',
                'sort_order': 1,
                'roles': ['admin', 'super_admin']
            },
            {
                'name': 'PM项目管理',
                'code': 'pm_system', 
                'description': '项目管理和报告生成系统',
                'icon': 'fas fa-project-diagram',
                'url': '/select_department/',
                'color': 'success',
                'sort_order': 2,
                'roles': ['admin', 'super_admin', 'pm_user']
            },
            {
                'name': '用户管理',
                'code': 'user_management',
                'description': '管理系统用户账户',
                'icon': 'fas fa-users',
                'url': '/rbac/user_management/',
                'color': 'info',
                'sort_order': 3,
                'roles': ['admin', 'super_admin']
            },
            {
                'name': '角色管理',
                'code': 'role_management',
                'description': '管理用户角色和权限',
                'icon': 'fas fa-user-tag',
                'url': '/rbac/role_list/',
                'color': 'warning',
                'sort_order': 4,
                'roles': ['admin', 'super_admin']
            },
            {
                'name': '系统仪表板',
                'code': 'dashboard',
                'description': '系统概览和统计信息',
                'icon': 'fas fa-tachometer-alt',
                'url': '/rbac/dashboard/',
                'color': 'secondary',
                'sort_order': 5,
                'roles': []  # 所有用户都可访问
            }
        ]

        created_count = 0
        updated_count = 0

        for menu_data in menus_data:
            roles_codes = menu_data.pop('roles', [])
            
            # 创建或更新菜单
            menu, created = Menu.objects.get_or_create(
                code=menu_data['code'],
                defaults=menu_data
            )
            
            if created:
                created_count += 1
                self.stdout.write(f"创建菜单: {menu.name}")
            else:
                # 更新现有菜单
                for key, value in menu_data.items():
                    setattr(menu, key, value)
                menu.save()
                updated_count += 1
                self.stdout.write(f"更新菜单: {menu.name}")
            
            # 分配角色
            if roles_codes:
                roles = Role.objects.filter(code__in=roles_codes)
                menu.required_roles.set(roles)
            else:
                menu.required_roles.clear()

        self.stdout.write(
            self.style.SUCCESS(
                f'菜单数据处理完成！创建 {created_count} 个，更新 {updated_count} 个菜单。'
            )
        )